.. _ecmPtmCtl_Begin: ecmPtmCtl_Begin =============== --------------- SYNOPSIS -------- .. code-block:: none t_success ecmPtmCtl_Begin( t_i32 NetID, t_i32 PtmMapIndex, t_ui32 AxisMask1, t_ui32 AxisMask2, t_i32 *ErrCode ) DESCRIPTION ----------- - 이 함수는 PtmMapIndex로 지정된 PT-Motion 맵에 대해서 PT-Motion 기능을 시작하는 함수입니다. - 이 함수가 호출된 이후에 ecmPtmCfg_AddItem_PT() 함수를 실행하면 등록된 Position-Table 값에 해당하는 이송이 이루어짐니다. PARAMETER --------- - NetID : Network 번호 - PtmMapIndex : 시작하고자 하는 대상 PT-Motion 맵 인덱스. PT-Motion 맵은 최대 8개까지 지원되므로 이 값은 0 ~ 7의 숫자이어야 합니다. - AxisMask1 : 0 ~ 31번 축 중에서 PT-Motion에 참여하는 축을 선택하는 마스크 값입니다. 이 값의 각 비트 별 값의 의미는 아래 표와 같습니다. +------------+----------------------------------------------+ | Bit Number | Meaning | +============+==============================================+ | BIT00 | 0번 축의 포함 여부 (0 : 포함안함, 1 : 포함) | +------------+----------------------------------------------+ | BIT01 | 1번 축의 포함 여부 (0 : 포함안함, 1 : 포함) | +------------+----------------------------------------------+ | BIT02 | 2번 축의 포함 여부 (0 : 포함안함, 1 : 포함) | +------------+----------------------------------------------+ | : | | +------------+----------------------------------------------+ | BIT31 | 31번 축의 포함 여부 (0 : 포함안함, 1 : 포함) | +------------+----------------------------------------------+ - AxisMask2 : 32 ~ 63번 축 중에서 PT-Motion에 참여하는 축을 선택하는 마스크 값입니다. 이 값의 각 비트 별 값의 의미는 아래 표와 같습니다. +------------+----------------------------------------------+ | Bit Number | Meaning | +============+==============================================+ | BIT00 | 32번 축의 포함 여부 (0 : 포함안함, 1 : 포함) | +------------+----------------------------------------------+ | BIT01 | 33번 축의 포함 여부 (0 : 포함안함, 1 : 포함) | +------------+----------------------------------------------+ | BIT02 | 34번 축의 포함 여부 (0 : 포함안함, 1 : 포함) | +------------+----------------------------------------------+ | : | | +------------+----------------------------------------------+ | BIT31 | 63번 축의 포함 여부 (0 : 포함안함, 1 : 포함) | +------------+----------------------------------------------+ - ErrCode : 이 매개 변수를 통하여 현재의 에러 코드를 반환합니다. 단, 이 매개 변수에 NULL을 전달하면 에러 코드를 반환하지 않습니다. RETURN VALUE ------------ - 이 리턴값은 불 형(Boolean Type) 을 가지고 있습니다. +-------+------------------------------------+ | Value | Meaning | +=======+====================================+ | 0 | 함수 수행이 실패했음을 의미합니다. | +-------+------------------------------------+ | 1 | 함수 수행이 성공했음을 의미합니다. | +-------+------------------------------------+ EXAMPLE ````````````` .. code-block:: cpp :linenos: //본 예제는 PT Motion 관련 예제입니다. #include "ComiEcatSdk_Api.h" // SetBit() : 지정한 변수의 특정 비트의 값을 변경한다. 매크로이므로 함수명과 괄호가 떨어지면 않됨에 주의! // v:대상 변수, n:bit번호, s:변경값(state) #define ecSetBit(v,n,s) if(s) (v)|=(1<<(n)); else (v)&=~(1<<(n)) #define AXIS 0 #define PTM-MAP 0 #define VEL_HIGH 500000.0 #define ACC_TIME 100 #define DEC_TIME 100 #define VWORK_TIME 2000 #define DELTA_T 0.001 // Delta-T (sec) #define NUM_AXES 3 int g_nAxisList[NUM_AXES] = {0, 1, 2}; t_32 Error_Num = 0;//함수 별 에러 코드 저장 변수 /*************************************************************** * OnProgramInitial : 이 함수는 가상의 함수로서 프로그램 초기화 루틴이 * 적용되는 부분을 의미합니다. //5~9장 사이 내용 참고 ***************************************************************/ void OnProgramInitial() { TEcDevInfo Device_Info; //디바이스 정보 저장 할 구조체 t_i32 Device_Num = 0; t_success nIsLoaded = ecDll_Load (); if(!ecGn_LoadDevices(&Error_Num)){ //장치 로드 //로드 실패시 예외 처리 } if(!ecGn_GetDevInfo(Device_Num,&Device_Info, &Error_Num)){ //디바이스 정보 로드 실패 시 예외 처리 } //ALState OP모드로 전환 ecNet_SetAlState(Device_Info.NetIdx, ecAL_STATE_OP, &Error_Num); ecmSxCtl_SetSvon(Device_Info.NetIdx, AXIS0, &Error_Num); } //OnProgramInitial 함수 끝 /******************************************************************** * OnPTMotion: 이 함수는 PT모션 등록 및 시작 부분 * 많은 세팅 관련 함수가 있지만 경우에 따라 사용자가 선택해서 사용 *********************************************************************/ void OnPTMotion () { t_f64 WorkVelList[NUM_AXES] = {300000, 400000, 500000}; t_f64 Acc[NUM_AXES], Dec[NUM_AXES]; t_f64 PosDataList[NUM_AXES]; t_f64 InstVel; t_i32 RegStepCount = 0; t_i32 RemStepCount = 0; t_i32 RunStepCount = 0, RunStepSts = 0; t_ui32 g_dwAxisMask1, g_dwAxisMask2; // 1) PT-Motion 맵번호 int nPtmMapIndex = PTM-MAP; // 2) 각 축의 가속도와 감속도 계산 g_dwAxisMask1 = g_dwAxisMask2 = 0; // 축 마스크 리셋 for(i=0; i